#pragma warning(disable:4201)  //nonstandard extension used : nameless struct/union
#include <ndis.h>
#include <ntddk.h>
#include <ntddkbd.h>
#include <ntddmou.h>

//////////////////////////////////////////////////////////////////////////
// Constants
//////////////////////////////////////////////////////////////////////////
#define FILE_DEVICE_AST					0x8000

//////////////////////////////////////////////////////////////////////////
// IO Control
//////////////////////////////////////////////////////////////////////////
#define IOCTL_BASE 0x800
#define CTL_CODE_AST(i)	(ULONG)(CTL_CODE(FILE_DEVICE_AST, IOCTL_BASE + i, METHOD_BUFFERED, FILE_ANY_ACCESS))

//////////////////////////////////////////////////////////////////////////
// Undocumented
//////////////////////////////////////////////////////////////////////////
extern POBJECT_TYPE *IoDriverObjectType;
extern POBJECT_TYPE *IoDeviceObjectType;
NTSTATUS ObReferenceObjectByName(IN PUNICODE_STRING ObjectName, IN ULONG Attributes, IN PACCESS_STATE PassedAccessState OPTIONAL, IN ACCESS_MASK DesiredAccess OPTIONAL, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, OUT PVOID *Object);

//////////////////////////////////////////////////////////////////////////
// Dummy Print
//////////////////////////////////////////////////////////////////////////
#if (!DEBUG)
	#undef KdPrint
	#define KdPrint(_x_) DummyPrint _x_
#endif
ULONG __cdecl DummyPrint(_In_z_ _Printf_format_string_ PCSTR Format, ...);
